# 需求：
# 获取 湖南省环保信用评价管理系统 - 企事业单位环保信用评价结果 的数据，并保存为excel文件
# https://218.76.24.162:5014/hnxypjqyd/frontal-ie/#/evaluationSearch?key=&type=QSYDW
# 注意：该网址需要绕过网页的不安全验证
import urllib3
import json
import pandas as pd
from datetime import datetime
from time import sleep
import os

def getData(page):

    # 创建一个连接池管理器
    http = urllib3.PoolManager()

    # 定义要发送的JSON数据
    data = {
        "pageNum": page,
        "pageSize": 40,
        "QYMC": "",
        "PJDJ": "",
        "ND": "",
        "CPJB": "",
        "SSDS": ""
    }

    # 将数据转换为JSON字符串
    json_data = json.dumps(data)

    # 定义请求头，指定Content-Type为application/json
    headers = {'Content-Type': 'application/json;charset=UTF-8'}

    # 发送POST请求
    # try
    http = urllib3.PoolManager(cert_reqs='CERT_NONE', assert_hostname=False)
    response = http.request('POST', "https://218.76.24.162:5014/hnxypjqyd/xxgk/queryXxgsQy", body=json_data, headers=headers)

    # 获取响应内容
    response_data = response.data.decode('utf-8')
    print(response_data)

    # 解析JSON字符串为Python对象
    json_data = json.loads(response_data)

    return pd.DataFrame(json_data['list']),json_data['nextPage']


def appendToExcel(file_path, content):
    '''
    该函数接收带路径的文件名和内容。内容是pandas的DataFrame。该函数首先
    判断带路径的文件名的文件是否存在，如果不存在则直接使用pandas将内容存
    入带路径的文件名的文件中。如果存在，则先读取该文件中已有的内容，然后将
    传入的内容除了第一行表头外的所有追加到已有内容，最后将追加后的已有内容
    存入带路径的文件名的文件中。
    如果上述顺利完成，则返回true，否则返回false。
    '''
    if os.path.exists(file_path):
        # 文件已存在，读取现有内容
        existing_data = pd.read_excel(file_path)
        
        # 追加新数据（除表头外的所有行）
        new_data = content#.iloc[1:]
        # updated_data = existing_data.append(new_data, ignore_index=True)
        updated_data = pd.concat([existing_data,new_data],axis=0,ignore_index=True)
        
        # 将更新后的数据写入文件
        try:
            updated_data.to_excel(file_path, index=False)
            return True
        except Exception as e:
            print(f"写入文件时出错：{str(e)}")
            return False
    else:
        # 文件不存在，直接写入新数据
        try:
            content.to_excel(file_path, index=False)
            return True
        except Exception as e:
            print(f"写入文件时出错：{str(e)}")
            return False

def dropDuplicates(file_path:str):
    '''
    删除重复项
    '''
    if os.path.exists(file_path):
        existing_data = pd.read_excel(file_path)
        updated_data = existing_data.drop_duplicates()
        try:
            updated_data.to_excel(file_path, index=False)
            return True
        except Exception as e:
            print(f"写入文件时出错：{str(e)}")
            return False


if __name__ == '__main__':

    nextPage=1

    while nextPage > 0:

        print(f'预备获取第{nextPage}页的内容')

        new_data,nextPage = getData(nextPage)

        print(f'下一页是第{nextPage}页')

        # 获取当前日期
        current_date = datetime.now().strftime("%Y%m%d")

        # 构建文件名
        filename = f"./企事业单位环保信用评价结果-{current_date}.xlsx"
 
        # 调用 appendToExcel 函数
        result = appendToExcel(filename, new_data)

        sleep(1.5)

        if result:
            print(f'保存第{nextPage-1}页的内容数据追加成功！')
        else:
            print(f'保存第{nextPage-1}页的内容数据追加失败。')

    print(dropDuplicates(f"./企事业单位环保信用评价结果-{current_date}.xlsx"))